using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using M0;
using M1;
using UnityEngine;
using UnityEngine.AI;

[CreateAssetMenu(fileName = "Npc配置",menuName = "创建数据/Npc配置配置")]
public class Npc配置 : BaseModel<Npc配置,NpcData>
{
    private Dictionary<int, 人> 已经生成的Npc = new Dictionary<int, 人>();

    public void 执行逻辑(int npcId, bool 动态)
    {
        NpcData d = Datas.FirstOrDefault(f => f.Id == npcId);

        
        
        人 模型;
        
        if (已经生成的Npc.ContainsKey(npcId))
        {
            模型 = 已经生成的Npc[npcId];
        }
        else
        {
            if (d.sex == 0)
            {
                模型 = Resource加载.Instance.Load<人>("Prefab/女主");
            }
            else
            {
                模型 = Resource加载.Instance.Load<人>("Prefab/男主");
            }

            var 配置 = M二合小镇.Get说话者(d.sex, d.皮肤, d.装饰);
            模型.SetUp(配置.头发,配置.上衣,配置.裤子,配置.装饰详情);
            var p = GameObject.FindWithTag("Npc");
            模型.tag = "Npc";
            模型.transform.SetParent(p.transform);
            模型.SetId(d.Id);
            模型.SetName(d.Name);
            模型.Show名片(true);
            已经生成的Npc.Add(npcId,模型);
        }
        
        
        模型.transform.localEulerAngles = new Vector3(0, d.角度, 0);

        CapsuleCollider 掩码 = 模型.GetComponent<CapsuleCollider>();
        NavMeshAgent Agent = 模型.GetComponent<NavMeshAgent>();
        
        if (动态 && d.出场方式)
        {
            掩码.enabled = false;
            Agent.enabled = false;
            Vector3 pos = d.from.V3();
            Vector3 pos2 = d.to.V3();
            模型.transform.position = pos;
            模型.指定移动(pos2,1f, () =>
            {
                掩码.enabled = true;
                Agent.enabled = true;
            });
        }
        else
        {
            Vector3 pos = d.to.V3();
            模型.transform.position = pos;
        }
    }

    public 人 getNpc(int id)
    {
        if (已经生成的Npc.ContainsKey(id))
        {
            return 已经生成的Npc[id];
        }

        return null;
    }
}

[Serializable]
public class NpcData
{
    public int Id;
    public float 角度;
    public string Name;
    public int sex;
    public int 皮肤;
    public int 装饰;
    public string 表情;
    public bool 出场方式;
    public JsonV3 from;
    public JsonV3 to;

}